#include <string.h>
#include <iostream>


using std::cout;
using std::endl;

class CharArray
{
public:
    CharArray(const char * data)
    : _size(strlen(data))
    , _pdata(new char[_size + 1]())
    {
        strcpy(_pdata, data);
    }

    ~CharArray() {
        if(_pdata) {
            delete [] _pdata;
            _pdata = nullptr;
        }
    }

    int size() const {  return _size;   }

    //自定义下标访问运算符
    //有两个参数，第一个是this指针，
    //第二个参数类型可以是任意类型,并不一定是int类型，
    //可以根据情况进行调整
    char & operator[](int idx) {
        if(idx >= 0 && idx < size()) {
            return _pdata[idx];
        } else {
            cout << "idx out of range" << endl;
            static char ch = '\0';
            return ch;
        }
    }

    //begin和end函数是增强for循环需要提供的
    const char * begin() const
    {   return _pdata;  }  

    const char * end() const
    {   return _pdata + _size;  }
    

private:
    int _size;//字符串的长度
    char * _pdata;
};

int main()
{
    const char * pstr = "hello,world";
    CharArray carr(pstr);

    for(int i = 0; i < carr.size(); ++i) {
        //cout << carr[i] << " ";
        //cout << carr.operator[](i) << " ";
        carr[i]++;
    }

    for(auto & ch : carr) {
        cout << ch << " ";
    }
    cout << endl;

    return 0;
}

